Object Relational Mapping (ORM) প্রযুক্তি যেমন Hibernate বা JPA ব্যবহার করে ডেটাবেসের টেবিল এবং জাভা অবজেক্টের মধ্যে সম্পর্ক স্থাপন করা হয়। Entity Design হল ORM ব্যবহারের একটি গুরুত্বপূর্ণ অংশ, যা ডেটাবেসের কাঠামো এবং ডেভেলপমেন্ট প্রক্রিয়াকে সহজ এবং কার্যকর করে তোলে। তবে Entity Design করার সময় কিছু Best Practices অনুসরণ করা অত্যন্ত গুরুত্বপূর্ণ, যাতে ডেটাবেস অপারেশনগুলো দ্রুত এবং সহজভাবে পরিচালিত হয়।
Entity ক্লাস এবং টেবিল নামের মধ্যে সঙ্গতি রাখা গুরুত্বপূর্ণ। সাধারণত, Entity ক্লাসের নাম এবং টেবিল নাম একই রাখা উচিত। স্প্রিং ORM এবং Hibernate ডিফল্টভাবে ক্লাসের নাম অনুযায়ী টেবিলের নাম গঠন করে।
@Entity
@Table(name = "employee")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String department;
// Getters and Setters
}
এখানে, Employee
ক্লাসের সাথে employee
টেবিলের নাম মেলে।
Entity ক্লাসের প্রপার্টি গুলি টেবিলের কলামের সাথে সঙ্গতিপূর্ণ হতে হবে। স্প্রিং ORM এবং Hibernate সাধারণত এটি অটোমেটিকভাবে ম্যাপ করে, তবে যদি প্রয়োজন হয়, তখন @Column অ্যানোটেশন ব্যবহার করে কলামের নাম পরিবর্তন করা যেতে পারে।
@Column(name = "emp_name")
private String name;
এখানে, name
প্রপার্টি emp_name
নামের কলামের সাথে ম্যাপ করা হচ্ছে।
প্রতিটি Entity ক্লাসে একটি Primary Key থাকতে হবে, যা সাধারণত @Id
অ্যানোটেশন দিয়ে চিহ্নিত করা হয়। GeneratedValue ব্যবহার করে Primary Key এর মান অটোমেটিকভাবে জেনারেট করা যায়।
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
এতে, id
ফিল্ডটি ডাটাবেসে স্বয়ংক্রিয়ভাবে জেনারেট হবে।
Entity গুলোর মধ্যে সম্পর্ক স্থাপন করা খুব গুরুত্বপূর্ণ। স্প্রিং ORM এবং Hibernate এ বিভিন্ন ধরনের সম্পর্কের জন্য সুনির্দিষ্ট অ্যানোটেশন রয়েছে, যেমন:
উদাহরণস্বরূপ:
@Entity
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(mappedBy = "department")
private List<Employee> employees;
// Getters and Setters
}
এখানে, Department
ক্লাসে একটি One-to-Many সম্পর্ক তৈরি করা হয়েছে, যেখানে একটি Department
অনেক Employee
এর সাথে সম্পর্কিত।
Hibernate বা JPA-তে লেনদেনের সময় Lazy Loading এবং Eager Loading ব্যবহার করা হয় সম্পর্কযুক্ত Entity গুলোর লোডিং কন্ট্রোল করতে। Lazy Loading ব্যবহার করলে সম্পর্কযুক্ত Entity গুলো শুধুমাত্র প্রয়োজন হলে লোড হবে, আর Eager Loading ব্যবহার করলে সম্পর্কযুক্ত Entity গুলো একসাথে লোড হবে।
@OneToMany(fetch = FetchType.LAZY)
private List<Employee> employees;
এখানে, employees
ফিল্ডটি Lazy Loading
মোডে লোড হবে।
ডেটাবেসের টেবিলের Entity ক্লাস সরাসরি API বা ইউজার ইন্টারফেসের সাথে সংযুক্ত না করা উচিত। এর পরিবর্তে DTO ব্যবহার করা উচিত। DTO Entity ক্লাসের ডেটাকে প্রেজেন্টেশনের জন্য উপযোগী করে পরিবেশন করে।
public class EmployeeDTO {
private String name;
private String department;
// Constructor, Getters, and Setters
}
এতে, আপনি Entity ক্লাসের ডেটা DTO তে ট্রান্সফার করে প্রক্রিয়াটি আরও পরিষ্কার এবং সিস্টেমের নিরাপত্তা উন্নত করতে পারেন।
ডেটাবেসের টেবিলের জন্য সীমিত মান (এনাম) ব্যবহার করতে @Enumerated অ্যানোটেশন ব্যবহার করা যেতে পারে। এটি ডেটাবেসে সাধারণ স্ট্রিং ভ্যালু পরিবর্তে এনামের মান সংরক্ষণ করতে সহায়তা করে।
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Enumerated(EnumType.STRING)
private EmploymentType employmentType;
// Getters and Setters
}
public enum EmploymentType {
FULL_TIME,
PART_TIME
}
এখানে, employmentType
ফিল্ডটি FULL_TIME
অথবা PART_TIME
এনাম দিয়ে ধারণ করা হবে।
Entity Design এর সময় ডেটাবেস ট্রানজেকশন ম্যানেজমেন্টের বিষয়টি মাথায় রাখা উচিত। স্প্রিং ORM এ @Transactional অ্যানোটেশন ব্যবহার করে কার্যকর ট্রানজেকশন ম্যানেজমেন্ট করা যায়।
@Service
@Transactional
public class EmployeeService {
@Autowired
private EmployeeRepository employeeRepository;
public void saveEmployee(Employee employee) {
employeeRepository.save(employee);
}
}
এটি নিশ্চিত করে যে, ডেটাবেস অপারেশন একক ট্রানজেকশন হিসেবে পরিচালিত হবে এবং কোনো ত্রুটি ঘটলে তা রোলব্যাক হবে।
স্প্রিং ORM এ Entity Design করার জন্য কিছু গুরুত্বপূর্ণ Best Practices রয়েছে, যেমন Entity ক্লাসের নাম ও টেবিল নামের সঙ্গতি বজায় রাখা, Relationships সঠিকভাবে ম্যানেজ করা, Lazy এবং Eager Loading ব্যবহারে সঠিক সিদ্ধান্ত নেওয়া, DTO ব্যবহার করা, এবং ট্রানজেকশন ম্যানেজমেন্ট নিশ্চিত করা। এগুলোর মাধ্যমে আপনি কার্যকর ও সুসংগঠিত ডেটাবেস কাঠামো তৈরি করতে পারবেন, যা অ্যাপ্লিকেশনকে আরও স্কেলেবল এবং মেইনটেইনেবল করে তোলে।
Read more